home *** CD-ROM | disk | FTP | other *** search
- <Edited by x2ftp admin>
-
- Shortly after Tim Triemstra and I posted articles discussing strategy
- game AI to rec.games.programmer, a Danish student by the name of
- Peer Sommerlund (peso@diku.dk) posted an article in which he
- outlined an object-based "methodology" for implementing an AI system
- which combined my ideas with Tim's. I was impressed by the effort
- which Peer put into his article and wrote to him, suggesting that I
- would like to see his posting, Tim's postings and my "essay" appear
- together at x2ftp.oulu.fi. When Peer expressed his approval of the
- idea, I contacted Tim, who was also keen to be a part of the venture.
-
- --- Andrew
-
- e-mail addresses:
- Peer Sommerlund: peso@diku.dk
- Tim Triemstra: empath@umcc.umich.edu
-
- Jouni: Yes, we are very interested in computer opponent AI and want
- more theory, ideas, implementations, source code, anything =-)
-
- --------------------(Peer Sommerlund's article)--------------------
- Newsgroups: rec.games.programmer
- From: peso@diku.dk (Peer Sommerlund)
- Subject: Re: AI programming (ala Civ, Moo, etc.)
- Date: Fri, 2 Dec 1994 17:03:22 GMT
-
- andrew@cs.uct.ac.za (Andrew Luppnow) writes:
-
- > empath@umcc.umcc.umich.edu (Tim Triemstra) writes:
- >[Summary of a computer-player-AI technique based on "situations."]
- >
- >Tim's post reminded me of a little "essay" on the topic of
- >strategy-game AI which I wrote last year. I just thought I'd
- >dredge it up and see what you all think of the ideas I was
- >toying with back then. Hope the splurge below doesn't bore you
- >too much! ;-)
-
- [Andrew defines a hieracial system of situations]
-
- I think the two ideas match nicely. Tim has described a nice way of building
- prototypes for your game, Andrew has described a way to build larger systems
- (ie. ISS wargames).
-
- I like Tim's idea, especially the point about "the one that fits the current
- situation best". This way you could get your game up running fast, and
- refine it as you find weaknesses. You may even make your rule-database
- user-modifiable!
-
- A system that can be gradually expaned is very usefull. You might even make
- a system that can start at 1 level then later expand by building a higher
- level function. And another, etc..
-
- Let's call Tim's expansions for "horizontal expansion"
- and Andrew's for "vertical expansion"
-
- So, you should define two classes:
- class action
- class actor
-
- Action is what your actors do.
-
- Let's take an example
- Actor Tank1, Tank2, Boss;
-
- Actor gets goal from higher level, send goals to lower levels, gets progress
- >from lower levels, sends progress to higher levels
-
- Action =
- "move this direction", etc..
-
- Actor loop :
- get goal
- decide strategy
- deploy strategy
- evaluate strategy
- report to superior
-
- deploy strategy:
- send goal to lower level
- get report from lower level
-
- Ok, now all this should be running concurrently!
-
- Actor loop:
- switch
- case new goal: redesign strategy
- case report available: evaluate strategy
-
- redesign strategy:
- get goal
- evaluate current strategy
- if strategy needs change
- change strategy
- send new goals to lower levels
-
- evaluate strategy:
- see if current reports matches with current goal,
- can I optimize the situation by sending new goals to subordinates?
- if the situation has changed since last time superior was notified,
- tell him.
-
- Right. A concurrent Actor should know the following things:
- - last reports send to superior
- - last goals send to subordinates
- - current goal recieved from superior
- - current reports recieved from subordinates
- .. and the interesting part:
- - how to match goals and reports
-
- You may want to use Tim's excelent method here: A collection of
- situations (S), a distance measuerement (D) between situations, an
- action (A) connected to each situation.
-
- You find the S that is closest to the current situation S0 by minimizing
- D(S,S0). Then you apply the matching A. If you're clever, you'll sort the
- situations some way, and your search will be much quicker, but this is not
- neccesary in the first attempts to get things up running.
-
- so, "how to match goals and reports": Your situation has the following
- attributes: (last_goal_recieved, last_goals_send, last_reports_recieved,
- last_report_send) ... perhaps a few more: time, your location, etc.
-
- Just to be able to differ between goals going up and down, lets use this
- wording:
-
- superior
- A | Goal
- | Summary V
- me
- A | Command
- | Report V
- subordinate
-
-
- .. well, lots of talk. Back to the example:
-
- T1
- E
-
- T2
-
-
- This is a simple 2D game. Let's say each tank has a cannon that only points
- forwards, a tank turns slowly, so an escape strategy is to move a lot. The
- bullets take some time to hit target, so you can move forward, wait untill
- enemy points at you, then move back, etc. Also, the tank cannot turn, and
- move, at the same time.
-
- Some technical details:
- There is 32 directions your tank can face.
- Your tank is a circle with diameter 8,
- tank speed 0.1 unit/frame,
- cannon reload: 100 frames
-
- the bullet has diameter 1.
- bullet speed 1 unit/frame,
- bullet range: unlimited,
-
- An overall strategy (the boss) may be "surround": place a tank on opposite
- sides, let one duge the cannon, while the other shoots him in the back.
-
- Lets give the boss the following rules:
- "split": if tanks are close, separate them
- "surround": try to move the tanks such that ennemy is surrounded.
- "prepare duge": don't move the tank so close to the enemy that
- it cannot move away before it gets hit.
- leading to this set of commands:
- "move here, duge"
- "move here, kill"
-
- Let equip each tank with the following rules:
- "survive", 9: if ennemy is targeted on you, move 1-2 squares
- "kill", 5: if goal is "kill" rotate to target enemy, shoot
- "move", 4: if goal is "move here" rotate to face target position,
- move
- "duge", 6: if you are off your target position, and duging, wait
- until enemy cannon points at you.
- commands:
- "forward"
- "backwards"
- "wait" (don't move)
- "turn left"
- "turn right"
- "shoot"
- summary:
- "current position"
-
- Remember to put priorites on rules, you don't want the order of the rules
- decide which rule should be executed.
-
- regards,
- -Peer
- --
- Peer Sommerlund \ Groenjordskollegiet v2512 \ 2300 Koebenhavn S \ Denmark
- \ E-mail: peso@diku.dk
-
- -------------------------------------------------------------------
-